/**
 * @FilePath     : /src/lgmg_robots/agv_navigation/agv_navigate/agvNavigate/publicInterfaceSrc/public_helper.cpp
 * @Description  : 导航系统中的公共服务功能。
 *                 主要包括处理路径丢失事件、设置任务错误状态以及清除身份识别相关数据和任务的功能。
 *                 通过这些功能，系统能够更好地管理任务状态和错误处理。 
 * @Author       : xiujun.yang
 * @Version      : 1.0.0
 * @LastEditors  : haibo haibo.yang@lgmgim.cn
 * @LastEditTime : 2024-12-19 18:15:25
 * @Copyright (c) 2024 by 临工智能信息科技有限公司, All Rights Reserved. 
**/ 
#include "public_helper.h"
#include <agv_msgs/msg/agv_event.hpp> 
#include "public_kernel.h"
extern PublicAgvData PublicData; 
extern "C" {
/**
 * @brief 触发路径丢失
 *
 * 根据传入的错误信息和触发标志，决定是否触发路径丢失事件，并相应地设置任务状态。
 *
 * @param error_message 错误信息字符串
 * @param trigger       触发标志，true表示触发路径丢失事件，false表示清除路径丢失状态
 */
void TryToOccurPathLost(const std::string& error_message, bool trigger) 
{
#ifdef AGV_DEBUG_NAV
    return;
#endif
    if (trigger) {
        DEBUG_ERROR_OUT("Path lost: " << error_message << ", ForceSetPauseTask true");
        ForceSetPauseTask(true);
    } else {
        DEBUG_OUT("Clear path lost");
    }

    // 2023.12.20 modify by haibo
    SetTaskError(static_cast<int>(AGV_TASK_ERROR::ERROR_PATH_LOST), error_message, agv_msgs::msg::AGVEvent::ESTOP, trigger);
}

/**
 * @brief 设置任务错误状态
 *
 * 根据提供的任务ID、错误信息、控制模式和是否发生错误，更新任务错误状态。
 *
 * @param id 任务ID
 * @param detail 错误信息
 * @param control_mode 控制模式
 * @param occur 是否发生错误
 */
void SetTaskError(int id, const std::string& detail, int control_mode, bool occur) 
{
    PublicData.node_event.UpdateOneEvent(id, detail, control_mode, occur);
}

/**
 * @brief 清除身份识别相关数据和任务
 *
 * 该函数用于清除身份识别相关的数据和任务，包括节点事件和报告运行数据，并强制设置暂停任务为假。
 */
void ClearIdentification() 
{
    DEBUG_OUT("ClearIdentification");
    PublicData.node_event.Clear();
    PublicData.report_run_data.Clear();
    ForceSetPauseTask(false);
}

} // end extern "C"